package com.test.example.controller.async;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

import java.util.concurrent.CompletableFuture;

@Service
public class AsyncService {

    /**
     * 使用主线程池
     */
    @Async
    public void asyncMethod() {
        // 这个方法将会异步执行
        try {
            Thread.sleep(2000);
            System.out.println("在线程中执行异步操作: " + Thread.currentThread().getName());
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 使用其他的线程池
     */
    @Async("testExecutor")
    public void asyncMethod2() {
        // 这个方法将会异步执行
        try {
            Thread.sleep(2000);
            System.out.println("在线程中执行异步操作: " + Thread.currentThread().getName());
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 有返回值：支持 Future 和 CompletableFuture。
     */
    @Async
    public CompletableFuture<String> asyncMethodWithReturn(){
        try {
            // 模拟耗时操作
            Thread.sleep(5000);
            return CompletableFuture.completedFuture("异步任务返回值");
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 异步任务抛出异常
     */
    @Async
    public void hasException() {
        System.out.println("在线程中执行异步操作: " + Thread.currentThread().getName());
        throw new RuntimeException("任务异常!");
    }
}